{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "fe98a9e5-4646-47d0-9445-19bf22ef3a54",
   "metadata": {},
   "source": [
    "# <center>Ch1 模型微调概览与硬件选取 </center>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ef6ec0c",
   "metadata": {},
   "source": [
    "# 1.通用大模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41fb2435",
   "metadata": {},
   "source": [
    "通用大模型是一种基于深度学习的**大规模人工智能模型**，能够处理多种任务和场景，而无需针对每个具体任务单独设计模型。其核心特点是**通用性、强泛化能力和多任务适应性**，通常通过海量数据和庞大参数规模实现广泛的知识覆盖。\n",
    "\n",
    " **核心特点**\n",
    "1. **大规模参数**  \n",
    "   模型参数量通常达到**数十亿甚至万亿级别**（如GPT-3有1750亿参数），通过大量数据训练捕获复杂模式。\n",
    "   \n",
    "2. **多任务统一处理**  \n",
    "   可同时完成文本生成、翻译、问答、代码编写、逻辑推理等任务，突破传统AI模型的单一任务限制。\n",
    "\n",
    "3. **预训练 + 微调范式**  \n",
    "   先通过无监督学习从海量数据中学习通用知识（预训练），再通过少量标注数据适配具体任务（微调）。\n",
    "\n",
    "4. **跨模态能力**  \n",
    "   部分通用大模型支持文本、图像、音频等多模态输入/输出（如GPT-4、Gemini）。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c276e994",
   "metadata": {},
   "source": [
    "## 1.1 大模型的分类"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6038c775",
   "metadata": {},
   "source": [
    "目前市面上常见的通用大模型可以根据其**功能特点、应用领域和技术架构**划分为以下几类： \n",
    "\n",
    "### 1. 按功能特点划分\n",
    "#### （1）文本生成与理解模型\n",
    "- **特点**：专注于自然语言处理（NLP），擅长文本生成、翻译、问答、摘要等任务。\n",
    "- **代表模型**：\n",
    "  - GPT系列（OpenAI）：如GPT-3、GPT-4，以强大的文本生成能力著称。\n",
    "\n",
    "#### （2）多模态模型\n",
    "- **特点**：支持文本、图像、音频、视频等多种模态的输入和输出。\n",
    "- **代表模型**：\n",
    "  - Gemini（Google）：支持文本、图像、音频的多模态交互。\n",
    "  - GPT-4（OpenAI）：增强了对图像和文本的联合处理能力。\n",
    "\n",
    "#### （3）代码生成与理解模型\n",
    "- **特点**：专门用于代码生成、调试、补全和跨语言转换。\n",
    "- **代表模型**：\n",
    "  - Claude、DeepSeek-Coder（OpenAI）：支持多种编程语言的代码生成。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d84cea9d",
   "metadata": {},
   "source": [
    "### 2. 按应用领域划分\n",
    "#### （1）通用领域模型\n",
    "- **特点**：适用于广泛的日常任务，如对话、写作、翻译等。\n",
    "- **代表模型**：\n",
    "  - ChatGPT（OpenAI）：面向大众的对话式AI。\n",
    "\n",
    "#### （2）垂直领域模型\n",
    "- **特点**：针对特定领域（如医疗、法律、金融）进行优化，提供专业化的解决方案。\n",
    "- **代表模型**：\n",
    "  - Med-PaLM（Google）：专注于医疗领域的问答和诊断。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f028d4eb",
   "metadata": {},
   "source": [
    "### 3. 按技术架构划分\n",
    "#### （1）基于Transformer的模型\n",
    "- **特点**：采用Transformer架构，利用自注意力机制处理长序列数据。\n",
    "\n",
    "#### （2）混合专家模型（MoE）\n",
    "- **特点**：将模型划分为多个“专家”，根据输入动态选择部分专家进行计算，提高效率。\n",
    "\n",
    "#### （3）开源与闭源模型\n",
    "- **开源模型**：\n",
    "- **闭源模型**：\n",
    "  - **GPT系列**、**PaLM**、**Claude**等。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5937f5d0",
   "metadata": {},
   "source": [
    "### 4. 按规模划分\n",
    "#### （1）超大规模模型\n",
    "- **特点**：参数量达到千亿级别，训练成本极高。\n",
    "\n",
    "#### （2）中等规模模型\n",
    "- **特点**：参数量在数十亿到百亿级别，适合特定任务或资源有限的环境。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ebb9972",
   "metadata": {},
   "source": [
    "# 2.大模型微调"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f50a952e",
   "metadata": {},
   "source": [
    "大模型微调（Fine-tuning）是指在**预训练大模型**的基础上，通过**特定任务的数据**对模型进行进一步训练，使其适应特定任务或领域的过程。微调是大模型应用中的关键步骤，能够显著提升模型在特定任务上的性能。  \n",
    "\n",
    "### 微调的核心概念 \n",
    "1. **预训练模型**    \n",
    "   大模型首先通过海量通用数据（如互联网文本）进行预训练，学习通用的语言表示和知识。  \n",
    "\n",
    "2. **微调**    \n",
    "   在预训练模型的基础上，使用特定任务的数据（如情感分析、医疗问答）进行进一步训练，使模型适应具体任务。   "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "986cdbf9",
   "metadata": {},
   "source": [
    "## 2.1 什么场景需要大模型微调"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3cc4fb9",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241112155640821.png\" width=60%></div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "110825da",
   "metadata": {},
   "source": [
    "```json\n",
    "RAG:主要整合的是对知识库内容进行整合、汇总后输出。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aac38e56",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241112155928610.png\" width=60%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94b75126",
   "metadata": {},
   "source": [
    "```json\n",
    "微调：是对定制化模型的问答，是模型学习到的内容\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fbd2028",
   "metadata": {},
   "source": [
    "```json\n",
    "都是对行业知识内的问答：我该怎么选？\n",
    "```\n",
    "| 场景 |   RAG   |    微调 |\n",
    "| :--- | :--- | ---: |\n",
    "| 动态数据 | ✅ |  |\n",
    "| 成本 | ✅ |  |\n",
    "| 可解释性 | ✅ |  |\n",
    "| 场景需要通用能力 | ✅ |  |\n",
    "| 特色能力 |  | ✅ |\n",
    "| 延迟 |  | ✅ |\n",
    "| 微智能设备 |  | ✅ |\n",
    "| 模型幻觉 | ✅ | ✅ |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "98e9b3b9",
   "metadata": {},
   "source": [
    "```json\n",
    "场景一：医学论文整理\n",
    "    1、了解医学领域相关知识：微调\n",
    "    2、依赖整理能力：微调\n",
    "\n",
    "场景二：智慧库房\n",
    "    1、需要经常更新库房清单：RAG\n",
    "    2、具有正常对话能力：RAG\n",
    "\n",
    "场景三：智慧销售\n",
    "    1、经常更新产品数据：RAG\n",
    "    2、销售语气让人感到舒适有特色：微调\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a517a204",
   "metadata": {},
   "source": [
    "## 2.2 微调的作用\n",
    "1. **任务适配**  \n",
    "   将通用模型调整为适合特定任务的专用模型。\n",
    "   \n",
    "2. **性能提升**  \n",
    "   通过任务相关数据优化模型参数，显著提高任务表现。\n",
    "\n",
    "3. **数据效率**  \n",
    "   相比从头训练，微调只需少量标注数据即可达到高性能。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b9e10b6",
   "metadata": {},
   "source": [
    "##  2.3 Qwen系列模型示例：\n",
    "Qwen系列是由**阿里巴巴达摩院**开发的大语言模型，包括多个版本，如**Qwen-Base**（基础模型）和**Qwen-Instruct**（指令微调模型）。这些模型基于Transformer架构，通过大规模预训练和微调实现强大的语言理解和生成能力。\n",
    "\n",
    "### Base模型与Instruct模型的关系\n",
    "#### （1）Base模型\n",
    "- **定义**：Base模型是经过**大规模预训练**的通用模型，学习了海量文本数据中的语言模式和知识。\n",
    "- **特点**：\n",
    "  - 通用性强，适用于多种任务。\n",
    "  - 未针对特定任务优化，可能无法直接满足用户需求。\n",
    "- **用途**：作为基础模型，可用于进一步微调或研究。\n",
    "\n",
    "#### （2）Instruct模型\n",
    "- **定义**：Instruct模型是在Base模型的基础上，通过**指令微调（Instruction Fine-tuning）**得到的专用模型。\n",
    "- **特点**：\n",
    "  - 针对用户指令进行优化，能够更好地理解和执行任务。\n",
    "  - 在对话、问答、代码生成等任务上表现更优。\n",
    "- **用途**：直接应用于实际场景，如智能助手、内容生成等。\n",
    "\n",
    "###  大模型微调的过程\n",
    "以Qwen系列为例，微调过程可以分为以下几个步骤：\n",
    "\n",
    "#### （1）预训练\n",
    "- **目标**：让模型学习通用语言表示。\n",
    "- **数据**：使用大规模无标注文本（如互联网数据）。\n",
    "- **结果**：得到**Qwen-Base**模型。\n",
    "\n",
    "#### （2）指令微调\n",
    "- **目标**：让模型适应特定任务（如对话、问答）。\n",
    "- **数据**：使用高质量的指令-响应对。\n",
    "- **方法**：\n",
    "  - 在Qwen-Base模型的基础上，使用指令数据进行微调。\n",
    "  - 通过监督学习或强化学习优化模型参数。\n",
    "- **结果**：得到**Qwen-Instruct**模型。可直接用于智能助手、内容生成等场景。\n",
    "\n",
    "#### （3）领域微调（可选）\n",
    "- **目标**：让模型在特定领域（如医疗、法律）表现更好。\n",
    "- **数据**：使用领域相关的指令数据。\n",
    "- **结果**：得到领域专用的Instruct模型（如Qwen-Med-Instruct）。在医疗领域表现更优，适用于医疗问答、诊断辅助等。\n",
    "\n",
    "\n",
    "###  微调的实际意义\n",
    "- **提升任务性能**：通过微调，模型能够更好地理解和执行特定任务。\n",
    "- **降低开发成本**：无需从头训练模型，只需在Base模型上进行微调。\n",
    "- **快速适配新任务**：通过少量数据即可微调出专用模型。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2dde806",
   "metadata": {},
   "source": [
    "# 3.微调的步骤"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e417ab7b",
   "metadata": {},
   "source": [
    "##  3.1 微调的核心步骤\n",
    "大模型微调通常包括以下步骤：\n",
    "1. **确定任务目标**\n",
    "2. **准备数据**\n",
    "3. **选择预训练模型**\n",
    "4. **设置微调环境**\n",
    "5. **配置微调参数**\n",
    "6. **训练模型**\n",
    "7. **评估与验证**\n",
    "8. **部署与应用**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d63cbf63",
   "metadata": {},
   "source": [
    "## 3.2 详细步骤及链路\n",
    "\n",
    "#### **步骤1：确定任务目标**\n",
    "- **目标**：明确微调的具体任务和需求。\n",
    "- **示例**：\n",
    "  - 任务类型：文本分类、问答、文本生成等。\n",
    "  - 领域：医疗、法律、金融等。\n",
    "- **输出**：任务定义文档。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "403d5068",
   "metadata": {},
   "source": [
    "#### **步骤2：准备数据**\n",
    "- **目标**：收集和预处理任务相关数据。\n",
    "- **子步骤**：\n",
    "  1. **数据收集**：\n",
    "     - 收集与任务相关的标注数据（如分类标签、问答对）。\n",
    "     - 示例：医疗问答数据、法律文书数据。\n",
    "  2. **数据清洗**：\n",
    "     - 去除噪声数据（如重复、错误标注）。\n",
    "  3. **数据划分**：\n",
    "     - 将数据划分为训练集、验证集和测试集（如80%/10%/10%）。\n",
    "  4. **数据格式化**：\n",
    "     - 将数据转换为模型输入格式（如JSON、CSV）。\n",
    "- **输出**：高质量的训练数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6226711",
   "metadata": {},
   "source": [
    "#### **步骤3：选择预训练模型**\n",
    "- **目标**：选择适合任务的预训练模型。\n",
    "- **考虑因素**：\n",
    "  - 模型规模（如参数量）。\n",
    "  - 模型架构（如Transformer）。\n",
    "  - 预训练数据（如通用文本、领域文本）。\n",
    "- **示例**：\n",
    "  - 通用模型：GPT-4、Qwen-Base。\n",
    "  - 领域模型：BioBERT（生物医学）、Legal-BERT（法律）。\n",
    "- **输出**：预训练模型文件。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f0b9dd9",
   "metadata": {},
   "source": [
    "#### **步骤4：设置微调环境**\n",
    "- **目标**：配置硬件和软件环境。\n",
    "- **子步骤**：\n",
    "  1. **硬件配置**：\n",
    "     - GPU/TPU：确保有足够的计算资源。\n",
    "  2. **软件配置**：\n",
    "     - 深度学习框架：如PyTorch。\n",
    "     - 模型库：如Hugging Face Transformers。\n",
    "  3. **依赖安装**：\n",
    "     - 安装必要的库和工具。\n",
    "- **输出**：配置好的微调环境。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "421249aa",
   "metadata": {},
   "source": [
    "#### **步骤5：配置微调参数**\n",
    "- **目标**：设置微调的超参数和训练策略。\n",
    "- **关键参数**：\n",
    "  1. **学习率**：控制参数更新的步长。\n",
    "  2. **批量大小（Batch Size）**：每次训练的样本数。\n",
    "  3. **训练轮数（Epochs）**：完整遍历训练数据的次数。\n",
    "  4. **优化器**：如AdamW、SGD。\n",
    "- **输出**：微调配置文件。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf3207c1",
   "metadata": {},
   "source": [
    "#### **步骤6：训练模型**\n",
    "- **目标**：在任务数据上微调模型。\n",
    "- **子步骤**：\n",
    "  1. **加载预训练模型**：\n",
    "     - 加载预训练模型的权重。\n",
    "  2. **加载数据**：\n",
    "     - 将训练数据加载到模型中。\n",
    "  3. **训练循环**：\n",
    "     - 前向传播：计算模型输出。\n",
    "     - 计算损失：比较输出与真实标签。\n",
    "     - 反向传播：更新模型参数。\n",
    "  4. **保存模型**：\n",
    "     - 定期保存微调后的模型。\n",
    "- **输出**：微调后的模型文件。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8164d0ac",
   "metadata": {},
   "source": [
    "#### **步骤7：评估与验证**\n",
    "- **目标**：评估微调模型的性能。\n",
    "- **子步骤**：\n",
    "  1. **验证集评估**：\n",
    "     - 使用验证集评估模型性能。\n",
    "  2. **测试集评估**：\n",
    "     - 使用测试集评估模型的泛化能力。\n",
    "  3. **错误分析**：\n",
    "     - 分析模型在哪些样本上表现不佳。\n",
    "  4. **调整参数**：\n",
    "     - 根据评估结果调整超参数。\n",
    "- **输出**：模型性能报告。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3090cb7a",
   "metadata": {},
   "source": [
    "#### **步骤8：部署与应用**\n",
    "- **目标**：将微调后的模型部署到实际场景中。\n",
    "- **子步骤**：\n",
    "  1. **模型导出**：\n",
    "     - 将模型导出为可部署格式。\n",
    "  2. **部署环境配置**：\n",
    "     - 配置服务器或云环境。\n",
    "  3. **接口开发**：\n",
    "     - 开发API或用户界面。\n",
    "  4. **监控与维护**：\n",
    "     - 监控模型性能，定期更新模型。\n",
    "- **输出**：部署好的微调模型。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fab27666",
   "metadata": {},
   "source": [
    "### **微调链路总结**\n",
    "1. **任务定义** → 2. **数据准备** → 3. **模型选择** → 4. **环境配置** → 5. **参数配置** → 6. **模型训练** → 7. **性能评估** → 8. **部署应用**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a52eda0",
   "metadata": {},
   "source": [
    "# 4.微调方式概览"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f39d151",
   "metadata": {},
   "source": [
    "### 1. 全量微调（Full Fine-tuning） "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "198cb648",
   "metadata": {},
   "source": [
    "```json\n",
    "    全量微调是指在预训练好的大模型基础上，针对特定任务或特定数据集进行进一步的训练，来适应新的任务需求。预训练模型通常在大规模数据上进行了广泛的训练，已经具备了一定的通用知识和特征提取能力。通过全量微调，可以将这些通用知识迁移到特定任务上，从而提高模型在该任务上的性能。\n",
    "\n",
    "主要调整内容：\n",
    "1. 模型参数\n",
    "    所有层的权重：预训练模型的所有层（包括嵌入层、隐藏层、输出层等）的权重都会在微调过程中进行更新。每一层的所有部分都会根据提供的数据进行优化。\n",
    "    偏置项：除了权重外，每个神经元的偏置项也会被调整。\n",
    "2. 任务特定的输出层调整：通常情况下，预训练模型的输出层不适合特定任务。因此，需要在预训练模型的基础上添加任务特定的输出层。\n",
    "3. 学习率：初始学习率通常设置得较小，以避免破坏预训练模型的权重。\n",
    "4.损失函数.......\n",
    "\n",
    "优点：\n",
    "    充分利用预训练模型的通用知识，减少从零开始训练所需的时间和资源。数据集较小情况下性能较为好\n",
    "缺点：\n",
    "    计算资源大，数据集较小情况下，容易导致过拟合，大规模数据集上消耗时间长。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "effb548f",
   "metadata": {},
   "source": [
    "### 2. 低秩矩阵微调Lora(Low-Rank Adaptation)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5315bf0",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241110165413671.png\" width=50%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "481f3163",
   "metadata": {},
   "source": [
    "```json\n",
    "    LoRA 的核心思想是将预训练模型的权重矩阵分解为两个低秩矩阵的乘积。假设原有矩阵权重为W微调过程中拆解成两个低秩矩阵A、B的乘积，冻结原有矩阵`+`两个低秩矩阵的乘积来适应新的任务。\n",
    "   优点：减少了训练参数数量，从而降低了计算和存储成本。资源少的情况下依然可以进行模型微调。灵活行较高能使用多种场景。\n",
    "   缺点：有一定技术复杂性相对全参调整需要多次尝试与实验。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4052316c",
   "metadata": {},
   "source": [
    "### 3. Qlora"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f4686b6",
   "metadata": {},
   "source": [
    "```json\n",
    "    QLoRA是一种量化LoRA (Low-Rank Adaptation) 的方法，它结合了LoRA和量化技术，通过在模型微调过程中引入低秩矩阵和量化技术，降低模型的存储和计算成本，同时保留微调后的模型性能。QLoRA主要用于大模型的微调，对比其他模型微调的好处就是节约微调空间与运行需要的空间。\n",
    "        LoRA是引入低秩矩阵来对模型进行微调。\n",
    "        量化 (Quantization)：是将高精度的浮点数（如FP32或FP16）转换为较低精度的整数（如int8或int4）表示，以减少模型的存储空间和加速推理。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86fa17c2",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241125222513938.png\" width=100%></div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbefafd5",
   "metadata": {},
   "source": [
    "### 4. 适配器微调（Adapter Tuning）\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6824f7e",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241110163736809.png\" width=50%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c8da5c6",
   "metadata": {},
   "source": [
    "```json\n",
    "    通过在预训练模型中插入适配器模块（Adapters）来实现对特定任务的适应，不需要更新整个模型的参数，适配器模块插入到各个层中，每个模块都仅有少量参数组成。适配器模块主要通过非线性的方式将高纬度数值映射为低纬度，然后再将关键的低纬度数值映射到高纬度中方便大模型的编译计算。同时使用跳跃连接方式保证，如果适配器初始参数过会直接从输入到输出，来保证模型有效。\n",
    "   因原理是在大模型不同层次中插入适配器多个适配器可以存在同一模型中，每种适配器可以处理单独的一类问题，同一模型中可以插入不同的适配器模块，能够同时处理多种不同的任务。\n",
    "   因这种需要直接插入到模型层级中，导致训练复杂度与设计度较高。比较容易产生过拟合等问题。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2de5bb2",
   "metadata": {},
   "source": [
    "### 5. 其他微调"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f08c38d",
   "metadata": {},
   "source": [
    "```json\n",
    "冻结微调（Frozen Fine-tuning）\n",
    "    定义：只更新模型的顶层或少数几层，而保持预训练模型的底层参数不变。\n",
    "    应用场景：目标任务与预训练模型之间有一定相似性，或者任务数据集较小。但是微调性能很难达到最佳。\n",
    "逐层微调（Layer-wise Fine-tuning）\n",
    "    定义：从顶层开始，逐渐向底层推进。这种方法允许更细粒度地控制模型的调整过程，直到所有层都被微调。\n",
    "    应用场景：适用于需要精细调整模型的任务。但是需要多次调整与训练，且花费时间较长\n",
    "动态微调（Dynamic Fine-tuning）\n",
    "    定义：在微调过程中动态调整学习率、批量大小等超参数，以优化模型性能。\n",
    "    应用场景：适用于需要高性能和高精度的任务。实现方式复杂且对资源要求较高\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fce837e6",
   "metadata": {},
   "source": [
    "## 强化学习 "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f6a242d",
   "metadata": {},
   "source": [
    "### 6. 人类反馈的强化学习（Reinforcement Learning from Human Feedback，RLHF） <br>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbaecaba",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241110181708019.png\" width=50%></div>\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0edab1f",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241112155300423.png\" width=50%></div>\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "313ae17d",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241112155317305.png\" width=50%></div>\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcc1f9d4",
   "metadata": {},
   "source": [
    "```json\n",
    "第一步：训练监督策略模型\n",
    "    从提示词数据集中取样一个提示词：首先，从包含各种提示词的数据集中随机选取一个提示词作为初始输入。\n",
    "    数据标记工程师给出期望的输出行为：然后，由人工标注员为这个提示词提供一个期望的故事内容或结构，这将作为模型的目标输出。\n",
    "    通过监督学习微调：接下来，使用监督学习的方法对模型进行微调，使其能够基于提供的提示词生成接近于预期结果的故事。\n",
    "第二步：训练奖励模型\n",
    "    取样一个提示词和模型多个输出：在这个阶段，再次从数据集抽取一个提示词，并让模型产生多个不同的故事版本。\n",
    "    数据标记工程师给出优劣排序：人工标注员会对这些不同版本的故事进行评估并按质量高低进行排序。\n",
    "    训练奖励模型：最后，用这些带有评分的故事样本去训练一个奖励模型，该模型学会预测哪些故事更符合人类的标准。\n",
    "第三步：采用近端策略优化进行强化学习\n",
    "    从提示词数据集取样一个新的提示词：继续从数据集中获取新的提示词作为下一个迭代的基础。\n",
    "    PPO模型由模型初始化：使用之前训练好的模型开始生成故事。\n",
    "    模型生成一个输出：模型尝试根据新提示词生成一个完整的故事。\n",
    "    奖励模型计算输出奖励值：接着，奖励模型会评价这个新生成的故事，并给出相应的分数。\n",
    "    利用PPO算法结合奖励更新策略：最后，通过Proximal Policy Optimization (PPO)算法，结合奖励模型的反馈来调整模型的行为，使得它在未来能够生成更加高质量的故事。\n",
    "\n",
    "  人工标注花费成本太高产生了——》`AI反馈强化学习(RLAIH)`相当于大模型替代了人工标记的工作。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc0ee231",
   "metadata": {},
   "source": [
    "### 7. PPO(近端优化策略) <br>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74e9f5e8",
   "metadata": {},
   "source": [
    "```json\n",
    "    引入了策略网络与价值网络的概念。通过策略网络生成动作的概率分布。使用价值网络估计当前状态的价值函数，即从当前状态开始的期望累积奖励。\n",
    "    在每个训练周期（epoch）内，使用当前策略在环境中收集一批经验（状态、动作、奖励、下一状态等）。在环境内进行交互，并且将每一次循环后的经验存储在一个缓冲区方便后续迭代累计使用。\n",
    "    通过限制每次更新的幅度来提高训练的稳定性，比较适合处理复杂的决策任务。\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5db48aee",
   "metadata": {},
   "source": [
    "### 8. DPO（直接偏好优化）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b28e42bd",
   "metadata": {},
   "source": [
    "```json\n",
    "    通过直接利用人类的偏好数据来优化模型。与传统的强化学习方法（如RLHF）不同，DPO不需要构建复杂的奖励模型，而是通过比较不同输出的优劣来进行训练。\n",
    "    DPO的核心在于创建一个包含人类偏好的数据集，每个数据对由一个提示和两个可能的输出（一个是首选，另一个是不受欢迎）组成。模型通过最大化生成首选输出的概率，同时最小化生成不受欢迎输出的概率来进行微调。这一过程可以看作是一个分类问题，模型的目标是提高对首选输出的生成概率，并降低对不受欢迎输出的生成概率\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10cf9888",
   "metadata": {},
   "source": [
    "### 9. GRPO(组相对策略优化)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a29b0577",
   "metadata": {},
   "source": [
    "**GRPO的核心原理**\n",
    "GRPO是一种改进的强化学习策略优化方法，其核心在于通过**分组优化**和**相对策略更新**，提升训练效率与稳定性。以下是其关键原理：\n",
    "\n",
    "1. **分组（Grouping）**  \n",
    "   - **定义**：将训练数据划分为多个小组（Group），每组包含具有相似特征或目标的样本。  \n",
    "   - **目的**：减少全局优化的复杂性，专注于组内相对改进。  \n",
    "   - **分组依据**：例如任务类型、数据难度、用户偏好等。\n",
    "\n",
    "2. **相对策略优化（Relative Policy Optimization）**  \n",
    "   - **组内比较**：在每组内评估策略的相对表现，而非全局绝对表现。  \n",
    "   - **奖励设计**：使用组内相对奖励（如排名、进步幅度）作为优化目标，激励模型在组内竞争中提升。  \n",
    "   - **示例**：在游戏中，若某组玩家水平相近，优化目标是让每个玩家比同组其他玩家表现更好。\n",
    "\n",
    "3. **稳定性控制**  \n",
    "   - **更新幅度限制**：通过裁剪（Clipping）或信任域（Trust Region）方法，防止策略更新过大。  \n",
    "   - **平衡探索与利用**：在组内优化时，既鼓励改进，又避免过度偏离当前策略。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aca4d9f5",
   "metadata": {},
   "source": [
    "### 10. SFT（监督式微调）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ccf9144",
   "metadata": {},
   "source": [
    "\n",
    "是一种通过**带标注的数据**对预训练大模型进行进一步训练的方法。其核心目标是让模型在特定任务（如文本分类、问答、生成）中表现更好，属于**监督学习**的范畴。\n",
    "\n",
    "- **类比**：就像让一个通才（预训练模型）通过专业培训（带标注的数据）成为某一领域的专家（任务专用模型）。\n",
    "\n",
    "SFT 的核心原理\n",
    "1. **预训练模型**：模型已通过海量无标注数据（如互联网文本）学习通用语言模式。\n",
    "2. **标注数据**：针对目标任务的标注样本（如问答对、分类标签）。\n",
    "3. **微调过程**：在预训练模型基础上，用标注数据调整模型参数，使其适配特定任务。\n",
    "\n",
    "SFT 的优势与挑战\n",
    " **优势**\n",
    "1. **简单高效**：直接利用标注数据优化模型，无需复杂算法设计。\n",
    "2. **快速适配**：少量数据即可显著提升任务表现（如百条标注样本）。\n",
    "3. **可解释性强**：监督学习过程透明，易于调试。\n",
    "\n",
    " **挑战**\n",
    "1. **数据依赖**：需要高质量标注数据，人工标注成本高。\n",
    "2. **过拟合风险**：小数据集上易过拟合（表现为训练集高分，测试集低分）。\n",
    "3. **领域局限**：微调后的模型可能在其他任务上表现下降。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69e47217",
   "metadata": {},
   "source": [
    "# 5.课纲设计"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a54e87ae",
   "metadata": {},
   "source": [
    "\n",
    "### 第一部分：微调基础理论\n",
    "- 模块1： 微调范式与硬件基础\n",
    "- 模块2： LoRA/QLoRA核心方法\n",
    "- 模块3： 指令监督微调（SFT）\n",
    "- 模块4： 强化学习框架\n",
    "- 模块5： 模型轻量化与加速\n",
    "\n",
    "\n",
    "### 第二部分：数据工程体系\n",
    "- 模块1：数据工程总览\n",
    "- 模块2：SFT数据完整链路\n",
    "- 模块3：偏好数据完整链路\n",
    "- 模块4：CoT数据完整链路\n",
    "\n",
    "\n",
    "### 第三部分：微调实战\n",
    "- 模块1：工具链\n",
    "- 模块2：强化学习微调实战\n",
    "- 模块3：高效微调技术\n",
    "- 模块4：多模型架构适配\n",
    "- 模块5：vllm/ollama应用\n",
    "- 模块6：模型评估验证\n",
    "\n",
    "### 第四部分：企业项目实战  \n",
    "- 行业项目实战\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa93dfd1",
   "metadata": {},
   "source": [
    "# 6.主流开源模型微调方式"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0cf6481",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250305141033665.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e36f910d",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250305141057988.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "310d5914",
   "metadata": {},
   "source": [
    "### **1. LLaMA系列**\n",
    "#### **核心优势方向**\n",
    "- **多语言对话与代码生成**：擅长生成多语言文本（尤其是英语）和代码补全，适用于通用对话系统、编程助手等场景。\n",
    "- **长上下文推理**：通过分组查询注意力支持长文本处理，适合文档摘要、多轮对话。\n",
    "\n",
    "#### **主要微调方法**\n",
    "- **LoRA/QLoRA**：通过低秩矩阵分解优化注意力层参数，显存需求低。\n",
    "- **DPO（直接偏好优化）**：替代传统PPO，直接利用偏好数据优化策略，减少计算成本。\n",
    "- **全参数微调**：需大规模算力（如多卡A100集群），适用于数据量大的企业级任务。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "262dabbd",
   "metadata": {},
   "source": [
    "### **2. Qwen系列（阿里巴巴）**\n",
    "#### **核心优势方向**\n",
    "- **中文长文本生成**：支持超长上下文，适合法律文书、科研论文生成。\n",
    "- **多模态与数学推理**：在数学问题求解（如MATH基准）和跨模态任务（文本+图像）中表现突出。\n",
    "- **企业级领域适配**：通过大规模SFT微调快速适配金融、医疗等垂直领域。\n",
    "\n",
    "#### **主要微调方法**\n",
    "- **全参数SFT微调**：官方推荐方法，需至少10万条高质量指令数据，结合层间学习率衰减提升稳定性。\n",
    "- **LoRA适配**：通过Hugging Face PEFT库实现，适合资源有限场景（如消费级GPU）。\n",
    "- **动态量化训练**：结合4-bit QLoRA优化显存占用，支持百亿参数模型微调。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e752782",
   "metadata": {},
   "source": [
    "### **3. ChatGLM系列（智谱AI）**\n",
    "#### **核心优势方向**\n",
    "- **中文对话与信息抽取**：基于GLM架构的混合目标训练，在中文问答、实体识别等任务中表现优异。\n",
    "- **轻量化部署**：6B/12B版本可在消费级GPU运行，适合中小企业快速落地。\n",
    "- **多任务兼容性**：微调后保留原始能力，避免灾难性遗忘。\n",
    "\n",
    "#### **主要微调方法**\n",
    "- **Freeze微调**：冻结大部分参数，仅优化顶层网络，显存需求低（如汽车故障抽取实验）。\n",
    "- **P-Tuning v2**：在Embedding层和每层前插入可训练前缀，提升小样本任务效果。\n",
    "- **混合训练策略**：结合SFT和PPO优化对话流畅度与安全性。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b9bfe6c",
   "metadata": {},
   "source": [
    "### **4. DeepSeek系列**\n",
    "#### **核心优势方向**\n",
    "- **复杂逻辑推理**：专长数学计算、代码生成和金融风控，支持多步逻辑链（CoT）推理。\n",
    "- **安全与合规性**：通过GRPO平衡生成内容的准确性与安全性，适用于法律、医疗等敏感领域。\n",
    "- **稀疏激活架构**：优化模型推理效率，适合高并发企业级应用。\n",
    "\n",
    "#### **主要微调方法**\n",
    "- **GRPO多目标优化**：动态调整梯度权重，解决多任务冲突（如安全性与生成质量）。\n",
    "- **混合数据增强**：融合SFT数据、偏好对和CoT推理链，提升领域适应性。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d74f7ef8",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250304222416318.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d4f473e",
   "metadata": {},
   "source": [
    "# 7.主流框架"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acbfeddf",
   "metadata": {},
   "source": [
    "### **1. LLaMA-Factory**\n",
    "#### **核心定位**  \n",
    "- **综合性微调工具链**：支持多种模型（LLaMA、Qwen、ChatGLM等）和微调方法（SFT、PPO、DPO等），覆盖全参数训练、LoRA、QLoRA等精度选择。\n",
    "- **开源生态集成**：与Hugging Face生态无缝衔接，支持从魔搭社区下载模型和数据集。\n",
    "\n",
    "#### **优势**  \n",
    "1. **多任务适配**：集成预训练、指令微调、强化学习（PPO/DPO）全流程，适合从研究到生产的全周期需求。  \n",
    "2. **灵活扩展**：提供可视化界面（LLaMA Board）和自定义模板功能，支持长上下文扩展（如RoPE插值）。  \n",
    "\n",
    "#### **典型场景**  \n",
    "- **多模型微调**：需同时适配LLaMA、Qwen等不同架构的模型。  \n",
    "- **混合精度训练**：需平衡显存占用与训练速度。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e9ebdc4",
   "metadata": {},
   "source": [
    "### **2. Unsloth**\n",
    "#### **核心定位**  \n",
    "- **轻量级训练加速库**：它通过优化算法和硬件加速，使得用户能够在消费级 GPU 上进行大规模模型的微调。\n",
    "\n",
    "#### **优势**  \n",
    "1. 速度快： 通过优化算法和硬件加速，显著提高微调速度。\n",
    "2. 显存优化： 能够有效降低显存占用，支持在资源有限的设备上进行微调。\n",
    "3. 易于使用： 提供了简单的 API，方便用户集成到现有的微调流程中。\n",
    " \n",
    "\n",
    "#### **典型场景**  \n",
    "- **资源受限环境**：消费级GPU（如RTX 4090）快速微调大模型。  \n",
    "- **高频实验**：需快速验证不同微调策略的效果。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3af3224c",
   "metadata": {},
   "source": [
    "### **3. DeepSpeed**\n",
    "#### **核心定位**  \n",
    "- **分布式训练框架**：是微软开源的深度学习优化库，专注于提高大规模模型训练和推理的效率，提供显存优化与多GPU/多节点训练支持。\n",
    "\n",
    "#### **优势**  \n",
    "1. **显存优化**：通过ZeRO技术，分阶段（ZeRO-0/1/2/3）减少显存冗余，支持千亿级模型训练。  \n",
    "2. **分布式效率**：数据并行与模型并行结合，多卡训练速度接近线性扩展（如2卡训练时间减少50%）。  \n",
    "3. **混合精度支持**：结合FP16/BF16优化计算效率，适配高性能计算集群。\n",
    "\n",
    "#### **典型场景**  \n",
    "- **超大规模模型**：训练70B以上参数模型。  \n",
    "- **企业级部署**：需多节点协作的高并发训练任务。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "500a089f",
   "metadata": {},
   "source": [
    "### **4. TRL（Transformer Reinforcement Learning）**\n",
    "#### **核心定位**  \n",
    "- **强化学习微调库**：专注于基于人类反馈的强化学习（RLHF），与Hugging Face生态深度集成。\n",
    "\n",
    "#### **优势**  \n",
    "1. **算法集成**：原生支持PPO、DPO、KTO等策略，简化偏好对齐流程。  \n",
    "2. **低代码适配**：与Peft库结合，支持LoRA/QLoRA微调，显存占用低。  \n",
    "\n",
    "#### **典型场景**  \n",
    "- **对话系统优化**：通过DPO微调提升对话流畅度与安全性。  \n",
    "- **多目标对齐**：需平衡生成质量与合规性（如医疗/法律场景）。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea8a0d20",
   "metadata": {},
   "source": [
    "### **5. OpenRLHF**\n",
    "#### **核心定位**  \n",
    "- **开源RLHF框架**：专注于强化学习人类反馈的全流程实现，与TRL类似但更强调灵活性与可扩展性。\n",
    "\n",
    "#### **优势**  \n",
    "1. **模块化设计**：支持自定义奖励模型、策略优化器和数据管道。  \n",
    "2. **多框架兼容**：可与DeepSpeed等工具链结合，适配复杂训练环境。  \n",
    "\n",
    "#### **典型场景**  \n",
    "- **定制化RLHF需求**：需灵活调整奖励函数或训练流程的研究项目。  \n",
    "- **多阶段训练**：需分阶段优化策略模型与奖励模型的复杂任务。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85e3928e",
   "metadata": {},
   "source": [
    "# 8.硬件选择"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "db8e1e29",
   "metadata": {},
   "source": [
    "## 8.1 硬件平台"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53cad9cd",
   "metadata": {},
   "source": [
    "autodl地址：  https://www.autodl.com/login"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "33bcc26d",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250305112244285.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a685b042",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250305112221136.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4584cc5",
   "metadata": {},
   "source": [
    "优云智算地址： https://www.compshare.cn/"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e61e60a",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241122113423609.png\" width=100%></div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94b4f2b3",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20241122113505202.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a651cc5",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250305112648352.png\" width=100%></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f3af7cd",
   "metadata": {},
   "source": [
    "## 8.2 资源选择"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77f51245",
   "metadata": {},
   "source": [
    "nvidia 常见显卡系列介绍"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd139e4a",
   "metadata": {},
   "source": [
    "| 系列 | 主要特点 | 典型用户 |\n",
    "| --- | --- | --- |\n",
    "| RTX | 面向消费级市场，兼顾游戏、图形渲染和轻量深度学习任务。 | 游戏玩家、AI 初学者 |\n",
    "| A 系列 | 高性能训练和推理显卡，适合大规模深度学习训练。 | 数据中心、AI 研究团队 |\n",
    "| A800 | A 系列的特供版，性能略低但适合中国市场。 | 中国市场的大模型训练和推理 |\n",
    "| H 系列 | NVIDIA 的高端显卡，支持超大规模模型训练（如 GPT-3/4）。 | 超大规模 AI 项目、HPC 任务 |\n",
    "| H800 | H 系列的特供版，性能略低但适合中国市场。 | 中国市场的大模型训练和推理 |\n",
    "| L 系列 | 专业图形和推理显卡，适合数据可视化和轻量推理任务。 | 数据分析师、工作站用户 |\n",
    "| T 系列 | 入门级显卡，低功耗，适合推理和虚拟化任务。 | 节能型数据中心、云服务 |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "859d5633",
   "metadata": {},
   "source": [
    "推理模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7ff11f8",
   "metadata": {},
   "source": [
    "| 模型尺寸 | 精度   | 显存需求 (GB) | 推荐显卡                           |\n",
    "|----------|--------|---------------|------------------------------------|\n",
    "| 7B       | FP16   | 12            | RTX 4080 / RTX 4090                |\n",
    "|          | INT8   | 8             | RTX 4080 / T4                      |\n",
    "|          | INT4   | 6             | RTX 4080 / RTX 3060                |\n",
    "|          | INT2   | 4             | RTX 3060 / RTX 4080                |\n",
    "| 13B      | FP16   | 24            | RTX 4090                           |\n",
    "|          | INT8   | 16            | RTX 4090                           |\n",
    "|          | INT4   | 12            | RTX 4090 / RTX 4080                |\n",
    "|          | INT2   | 8             | RTX 4080 / RTX 4090                |\n",
    "| 30B      | FP16   | 60            | A100 (40GB) * 2                    |\n",
    "|          | INT8   | 40            | L40 (48GB)                         |\n",
    "|          | INT4   | 24            | RTX 4090                           |\n",
    "|          | INT2   | 16            | T4 (16GB)                          |\n",
    "| 70B      | FP16   | 120           | A100 (80GB) * 2                    |\n",
    "|          | INT8   | 80            | L40 (48GB) * 2                     |\n",
    "|          | INT4   | 48            | L40 (48GB)                         |\n",
    "|          | INT2   | 32            | RTX 4090                           |\n",
    "| 110B     | FP16   | 200           | H100 (80GB) * 3                    |\n",
    "|          | INT8   | 140           | H100 (80GB) * 2                    |\n",
    "|          | INT4   | 72            | A10 (24GB) * 3                     |\n",
    "|          | INT2   | 48            | A10 (24GB) * 2                     |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2a417e5",
   "metadata": {},
   "source": [
    "不同尺寸、不同精度大模型训练所需显存及硬件推荐"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b628f387",
   "metadata": {},
   "source": [
    "| 模型尺寸 | 精度   | 显存需求 (GB) | 推荐硬件配置                           |\n",
    "|----------|--------|---------------|---------------------------------------|\n",
    "| 7B       | AMP    | 120           | A100 (40GB) * 3                       |\n",
    "|          | FP16   | 60            | A100 (40GB) * 2                       |\n",
    "| 13B      | AMP    | 240           | A100 (80GB) * 3                       |\n",
    "|          | FP16   | 120           | A100 (80GB) * 2                       |\n",
    "| 30B      | AMP    | 600           | H100 (80GB) * 8                       |\n",
    "|          | FP16   | 300           | H100 (80GB) * 4                       |\n",
    "| 70B      | AMP    | 1200          | H100 (80GB) * 16                      |\n",
    "|          | FP16   | 600           | H100 (80GB) * 8                       |\n",
    "| 110B     | AMP    | 2000          | H100 (80GB) * 25                      |\n",
    "|          | FP16   | 900           | H100 (80GB) * 12                      |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6de8f0ab",
   "metadata": {},
   "source": [
    "不同尺寸、不同精度大模型高效微调所需显存及硬件推荐"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "676d984d",
   "metadata": {},
   "source": [
    "| 模型尺寸 | 精度           | 显存需求 (GB) | 推荐硬件配置                           |\n",
    "|----------|----------------|---------------|---------------------------------------|\n",
    "| 7B       | Freeze (FP16)  | 20            | RTX 4090                              |\n",
    "|          | LoRA (FP16)    | 16            | RTX 4090                              |\n",
    "|          | QLoRA (INT8)   | 10            | RTX 4080                              |\n",
    "|          | QLoRA (INT4)   | 6             | RTX 3060                              |\n",
    "| 13B      | Freeze (FP16)  | 40            | RTX 4090 / A100 (40GB)                |\n",
    "|          | LoRA (FP16)    | 32            | A100 (40GB)                           |\n",
    "|          | QLoRA (INT8)   | 20            | L40 (48GB)                            |\n",
    "|          | QLoRA (INT4)   | 12            | RTX 4090                              |\n",
    "| 30B      | Freeze (FP16)  | 80            | A100 (80GB)                           |\n",
    "|          | LoRA (FP16)    | 64            | A100 (80GB)                           |\n",
    "|          | QLoRA (INT8)   | 40            | L40 (48GB)                            |\n",
    "|          | QLoRA (INT4)   | 24            | RTX 4090                              |\n",
    "| 70B      | Freeze (FP16)  | 200           | H100 (80GB) * 3                       |\n",
    "|          | LoRA (FP16)    | 160           | H100 (80GB) * 2                       |\n",
    "|          | QLoRA (INT8)   | 80            | H100 (80GB)                           |\n",
    "|          | QLoRA (INT4)   | 48            | L40 (48GB)                            |\n",
    "| 110B     | Freeze (FP16)  | 360           | H100 (80GB) * 5                       |\n",
    "|          | LoRA (FP16)    | 240           | H100 (80GB) * 3                       |\n",
    "|          | QLoRA (INT8)   | 140           | H100 (80GB) * 2                       |\n",
    "|          | QLoRA (INT4)   | 72            | A10 (24GB) * 3                        |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbcfb8c0",
   "metadata": {},
   "source": [
    "# 9.总结"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f86ff913",
   "metadata": {},
   "source": [
    "<div align=center><img src=\"https://typora-photo1220.oss-cn-beijing.aliyuncs.com/DataAnalysis/muyan/image-20250305164953302.png\" width=100%></div>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "fufan_chat_api",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
